Status deste relatório: working in progress

Início

Metadados do artigo aceito para publicação na RSP de autoria de Rony Coelho, Felipe Guth e Miguel Loureiro

  • Neste relatório são disponibilizados os códigos e as bases de dados utilizados no artigo

    • Para verificar os códigos, clique em Code

    • Os códigos estão comentados com #

    • Um versão em formato de script (arquivo .Rmd) pode ser encontrada no github

    • Os dados brutos podem acessados nos respectivos links fornecidos adiante


00. Configurações prévias

  • Carregar pacotes

  • Definir funções

# limpar enviroment
rm(list = ls())

# Desabilitar notação científica
options(scipen = 999)

# Instalar este pacote para quem não o tem
#install.packages("pacman")

pacman::p_load(tidyverse, readxl, janitor, sjPlot, 
               scales, DataExplorer, DT, gridExtra,
               viridis, ggcorrplot, VGAM, geobr, ggthemes)

Função para carregar as Munics

# A funcao carrega dois objetos: 
# 1 - O dicionário da Munic, contido na primeira aba do excel; 
# 2 - Os dados das Munics contidos em todas as demais abas, unidos por "A1"

carregar_munics <- function(link_da_munic, ano){
  # definir diretório e arquivo temporário
  wd_origin <- getwd()
  temp_dir <- tempdir()
  setwd(temp_dir)
  file.remove(list.files(path = temp_dir))
  temp_file <- tempfile(tmpdir = temp_dir)
  # Criar lista para armazenar arquivos 
  Munic_list <- list()
  # Download da Munic
  download.file(url = link_da_munic, destfile = temp_file)
  # unizip
  unzip(temp_file)
  # remover temporário
  file.remove(temp_file)
  # selecionar o arquivo xls
  file.xls <- list.files(pattern = "xls")
  # Nome da Munic
  Munic <- paste0("Munic_", ano)
  # Carregar todas as abas do excel  
  Munic <- file.xls %>% 
  excel_sheets() %>% 
  set_names() %>% 
  map(read_excel, path = file.xls)
  # remover arquivo xls da pasta temporaria
  file.remove(file.xls)
  # Nome do dicionario
  dic <- paste0("dic_", ano)
  # selecionar dicionário
  dic <- Munic[[1]]
  # excluir dicionário
  Munic[[1]] <- NULL
  # Mesclar todas as abas do excel
  Munic <- Munic %>% 
      reduce(full_join, by = "A1")
  # Criar nome da lista 
  list <- paste0("list_", Munic)
  # criar lista com dicionário e Munic
  list <- list(dic, Munic)
  # retornar ao diretório orginal
  setwd(wd_origin)
  # retornar objeto list com dicionário e Munics
  return(list)
}

01. Carregar dados

Munic 2014
  • dados da saúde
  • educação
  • total de servidores do município (com graduação e pós-graduação)
Munic 2013 - Bloco Suplementar
  • dados da assistencia social
Munic 2015
  • dados dos consórcios nas três áreas (saúde, educ. e assist. social)
Pib
  • ano: 2014
IDH-M
  • ano: 2010
########################################
# Munic 2014
Munic_14_link <- "ftp://ftp.ibge.gov.br/Perfil_Municipios/2014/base_MUNIC_xls_2014.zip"

Munic_14 <- carregar_munics(link_da_munic = Munic_14_link,
                            ano = 2014)

Munic_dic_14 <- Munic_14[[1]]

Munic_14 <- Munic_14[[2]]

########################################
# Munic 2013 - Suplementar
Munic_13sup_link <- "ftp://ftp.ibge.gov.br/Perfil_Municipios/Assistencia_Social_2013/xls/base_assist_social_2013.zip"

Munic_13 <- carregar_munics(link_da_munic = Munic_13sup_link,
                            ano = 2013)

Munic_dic_13 <- Munic_13[[1]]

Munic_13 <- Munic_13[[2]]

########################################
# Munic 2015
Munic_15_link <- "ftp://ftp.ibge.gov.br/Perfil_Municipios/2015/Base_de_Dados/Base_MUNIC_2015_xls.zip"

Munic_15 <- carregar_munics(link_da_munic = Munic_15_link,
                            ano = 2015)

Munic_dic_15 <- Munic_15[[1]]

Munic_15 <- Munic_15[[2]]

########################################
# Pib   
pib_link <- "ftp://ftp.ibge.gov.br/Pib_Municipios/2017/base/base_de_dados_2010_2017_xls.zip"
temp_dir <- tempdir()
#
temp_file2 <- tempfile(tmpdir = temp_dir)
# download
download.file(url = pib_link, destfile = temp_file2)
#unzip
unzip(temp_file2)
# selecionar arquivo
file.xls <- list.files(pattern = "xls")

pib <- rio::import(file.xls)
file.remove(file.xls)

########################################    
# Carregar dados do idh-m
idhm_link <- "http://atlasbrasil.org.br/2013/data/rawData/atlas2013_dadosbrutos_pt.xlsx"

idhm <- rio::import(idhm_link, sheet = 2)
#idhm <- read_excel("idh_census.xlsx", sheet = 2)   

########################################    
# base de códigos IBGE
#cod <- read_excel("codigos.xlsx") %>% 
#      dplyr::select(1:2)
Not run
# Uso particular para configurações no computador pessoal 
#setwd("C:/r_files/my_academic_projects/capacidades/capacitties")
#save.image("capacities_raw_data.RData")
#load("capacities_raw_data.RData")

Selecionar dados

###########################################
# Munic 2014 - saúde e educação
index_14 <- c("A263", # Conselho de Saúde
              "A271", # Fundo de Saúde
              "A273", # Plano de Saúde
              "A251", # Secretaria de Saúde
              "A256", # Servidores da Saúde
              "A207", # Conselho de Educação
              "A224", # Conselho do Fundeb, proxy para o fundo
              "A203", # Plano de Educação
              "A157", # Secretaria de Educação
              "A167", # Servidores da Educação
              #"A392", # Secretaria Direitos Humanos
              #"A545", # Fundo Direitos Humanos
              #"A410", # Plano Direitos Humanos
              #"A442",  # Conselho Direitos Humanos
              "A2",   # Total de servidores do Municipio 
              "A12", # Total com ensino Superior
              "A13") # Total com pós-graduação

Munic_14_sel <- Munic_14 %>% 
  dplyr::select(A1, 
                A1022:A1029, # região, população e porte
                index_14)
###########################################    
#Munic 2013 - Assistência Social
    index_13 <- c("A1", 
                  "A199", # Conselho da Assit. Social
                  "A230", # Fundo da Assist. Social
                  "A149", # Plano da Assist. Social
                  "A2", # Secretaria de Assist. Social
                  "A39") # Servidores da Assist. Social
    
    Munic_13_sel <- Munic_13 %>% 
      dplyr::select(index_13) 
###########################################    
# Munic 2015 - consórcios
    index_15 <- c("A1", 
                  "A151", # Consórcio de Educação
                  "A152", # Intermunicipal
                  "A153", # Estadual
                  "A154", # Federal
                  "A155", # Consórcio de Saúde
                  "A156", # Intermunicipal
                  "A157", # Estadual
                  "A158", # Federal
                  "A159", # Consórcio de Assist. Social
                  "A160", # Intermunicipal
                  "A161", # Estadual
                  "A162") # Federal

    Munic_15_sel <- Munic_15 %>% 
      dplyr::select(index_15)

###########################################        
# PIB - 2014
    pib <- clean_names(pib)
    pib_sel <- pib %>% #glimpse()
      filter(ano == 2014) %>% 
      select(A1 = codigo_do_municipio, ano, 
             pib_total = produto_interno_bruto_a_precos_correntes_r_1_000,
             pib_per_cap = produto_interno_bruto_per_capita_a_precos_correntes_r_1_00)%>%
      arrange(desc(pib_per_cap))
    
###########################################                
# IDH-M - 2010
    idhm_sel <- idhm %>% 
      dplyr::select(A1 = Codmun7, ANO, IDHM) %>% 
      filter(ANO==2010) %>% 
      arrange(desc(IDHM))

Mesclar bases

# garantir que os códigos possuem a mesma classficação
Munic_13_sel$A1 <- as.character(Munic_13_sel$A1)
Munic_15_sel$A1 <- as.character(Munic_15_sel$A1)
Munic_14_sel$A1 <- as.character(Munic_14_sel$A1)
pib_sel$A1 <- as.character(pib_sel$A1)
idhm_sel$A1 <- as.character(idhm_sel$A1)

# Criar variavel com código de 6 digitos para mesclar com a Munic 2013 e mesclar todas as Munics
capacities <- Munic_14_sel %>% 
  mutate(A1a = str_sub(A1,start = 1, end = 6)) %>% 
  select(A1, A1a, everything()) %>% 
  full_join(Munic_13_sel, by = c("A1a"="A1")) %>% 
  full_join(Munic_15_sel, by = c("A1"="A1"))

# Mesclar pib e idhm
capacities <- capacities %>% 
  full_join(pib_sel) %>% 
  full_join(idhm_sel)

Visualização parcial do banco

  • Apenas 10 primeiras linhas
  • Nomes das variáveis tais quais originais
capacities %>% head(10)

Organizar e renomenar variáveis

capacities <- capacities %>% 
  select(cod_mun = A1,
         nm_mun = A1027,
         populacao = A1028,
         faixa_pop = A1029,
         cod_est = A1022,
         nm_est = A1025,
         sg_est = A1026,
         regiao = A1024,
         # Secretarias
         sc_sa = A251,  
         sc_as = A2.y,  
         sc_ed = A157.x,
         # Planos
         pl_sa = A273,  
         pl_as = A149,  
         pl_ed = A203,  
         # Fundos
         fu_sa = A271,  
         fu_as = A230,  
         fu_ed = A224,  
         # Conselhos
         chl_sa = A263, 
         chl_as = A199, 
         chl_ed = A207, 
         # Servidores
         ser_sa = A256, 
         ser_as = A39,  
         ser_ed = A167,
         # Consórciso
         consor_ed = A151,
         #consor_ed_mun = A152 ,
         #consor_ed_est = A153,
         #consor_ed_un =  A154,
          consor_sa = A155,
         #consor_sa_mun = A156,
         #consor_sa_est = A157.y,
         #consor_sa_un =  A158,
          consor_as = A159,
         #consor_as_mun = A160,
         #consor_as_est = A161,
         #consor_as_un =  A162,
         pib_total = pib_total,
         pib_per_cap = pib_per_cap, 
         ano_pib = ano,
         idhm = IDHM,
         ano_idhm = ANO)

Verificar e remover NA’s

  • NA - Not Available (dados não disponíveis)
# Verificar existência de NAs
DataExplorer::plot_missing(capacities)

# NA - presentes apenas nos IDHM
# Excluir NA's
# Removidos 5 municipios não criados até 2010, portante sem o IDHM para esse ano.
capacities <- capacities %>% 
  drop_na(idhm)

DataExplorer::plot_missing(capacities)

Nova base 1

  • Criada para preservar os dados brutos em caso de reutilização
capacities_1 <- capacities

02. Visualizar dados brutos

Podem ser baixados em formato excel ou csv

  • Legenda:

    • cod_mun = código do município
    • nm_mun = nome do município
    • cod_est = código do estado
    • nm_est = nome do estado
    • sg_est = sigla do estado
    • populacao = população do município
    • faixa_pop = classificação da faixa populacional (IBGE)
    • sc_ = secretaria exclusiva (sa = saúde; ed = educação; as = assistência social)
    • pl_ = plano setorial (sa = saúde; ed = educação; as = assistência social)
    • fu_ = fundo setorial (sa = saúde; ed = educação; as = assistência social)
    • chl_ = conselho setorial (sa = saúde; ed = educação; as = assistência social)
    • ser_ = servidores setoriais (sa = saúde; ed = educação; as = assistência social)
    • consor_ = consórcios setoriais (sa = saúde; ed = educação; as = assistência social)
    • pib_total = Pib total do município
    • pib_per_cap = Pib per capta do município
    • ano_pib = Ano de referência do Pib
    • idhm = IDHM do município
    • ano_idhm = Ano de referência do IDHM
capacities_1 %>%
  datatable(extensions = 'Buttons',
            rownames = F,
            options = list(dom = 'Blfrtip',
                           buttons = c('csv', 'excel'),
                          autoFill = TRUE,
                           fixedHeader = TRUE,
                           autowidth = TRUE,
                           paging = F,
                           scrollX = TRUE,
                           scrollY = "400px"))

03. Manipulação

Not run
# Uso particular para configurações de uso pessoal
#setwd("C:/r_files/my_academic_projects/capacidades/capacitties")
#save.image("capacities_raw_data_2.RData")
#load("capacities_raw_data_2.RData")

Filtrar munincípios

  • Com menos de 50.000 habitantes

De 5.565 mun. passamos a trabalhar com 4.917 (88%)

capacities_2 <- capacities_1 %>% 
  filter(populacao <= 50000) %>% 
  mutate(faixa_pop = faixa_pop %>% as.factor())

unique(capacities_2$faixa_pop)
## [1] 4 - 20001 até 50000 2 - 5001 até 10000  3 - 10001 até 20000
## [4] 1 - Até 5000       
## 4 Levels: 1 - Até 5000 2 - 5001 até 10000 ... 4 - 20001 até 50000
summary(capacities_2$faixa_pop)
##        1 - Até 5000  2 - 5001 até 10000 3 - 10001 até 20000 4 - 20001 até 50000 
##                1242                1214                1381                1080
summary(capacities_2$populacao)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     822    4967   10008   13312   18595   49963

Classificar variáveis

character_col <- c("cod_mun", "nm_mun")

factor_col <- c("cod_est", "nm_est", "sg_est","faixa_pop", "regiao", "sc_sa", "sc_as", "sc_ed", "pl_sa", "pl_as", "pl_ed", "fu_sa", "fu_as", "fu_ed", "chl_sa", "chl_as", "chl_ed", "consor_ed", "consor_ed", "consor_sa", "consor_as") 

numeric_col <- c("populacao", "ser_sa", "ser_as", "ser_ed", "pib_total", "pib_per_cap", "ano_pib", "idhm","ano_idhm")

capacities_2 <- capacities_2 %>% 
  mutate_at(character_col, as.character) %>% 
  mutate_at(factor_col, as.factor) %>% 
  mutate_at(numeric_col, as.numeric)

Sumário das variáveis

  • Numéricas: são apresentados valores mínimos, máximos, média, mediana etc.

  • Categóricas: categorias e quantidade de cada uma

  • Character: quantidade de valores únicos

summary(capacities_2)
##    cod_mun             nm_mun            populacao    
##  Length:4917        Length:4917        Min.   :  822  
##  Class :character   Class :character   1st Qu.: 4967  
##  Mode  :character   Mode  :character   Median :10008  
##                                        Mean   :13312  
##                                        3rd Qu.:18595  
##                                        Max.   :49963  
##                                                       
##                faixa_pop       cod_est                   nm_est    
##  1 - Até 5000       :1242   31     : 785   Minas Gerais     : 785  
##  2 - 5001 até 10000 :1214   35     : 512   São Paulo        : 512  
##  3 - 10001 até 20000:1381   43     : 453   Rio Grande do Sul: 453  
##  4 - 20001 até 50000:1080   29     : 370   Bahia            : 370  
##                             41     : 364   Paraná           : 364  
##                             42     : 265   Santa Catarina   : 265  
##                             (Other):2168   (Other)          :2168  
##      sg_est                  regiao    
##  MG     : 785   1 - Norte       : 379  
##  SP     : 512   2 - Nordeste    :1611  
##  RS     : 453   3 - Sudeste     :1419  
##  BA     : 370   4 - Sul         :1082  
##  PR     : 364   5 - Centro-Oeste: 426  
##  SC     : 265                          
##  (Other):2168                          
##                                                    sc_sa     
##  Não informado                                        :   2  
##  Órgão da administração indireta                      :   4  
##  Recusa                                               :   1  
##  Secretaria municipal em conjunto com outras políticas: 366  
##  Secretaria municipal exclusiva                       :4417  
##  Setor subordinado a outra secretaria                 :  10  
##  Setor subordinado diretamente à chefia do Executivo  : 117  
##                                                    sc_as     
##  Fundação pública                                     :   3  
##  Não possui estrutura                                 :   2  
##  Recusa                                               :   1  
##  Secretaria municipal em conjunto com outras políticas: 963  
##  Secretaria municipal exclusiva                       :3727  
##  Setor subordinado a outra secretaria                 :  82  
##  Setor subordinado diretamente à chefia do Executivo  : 139  
##                                                    sc_ed     
##  Não informado                                        :   1  
##  Órgão da administração indireta                      :   2  
##  Recusa                                               :   1  
##  Secretaria municipal em conjunto com outras políticas:1983  
##  Secretaria municipal exclusiva                       :2751  
##  Setor subordinado à outra secretaria                 :   9  
##  Setor subordinado diretamente à chefia do Executivo  : 170  
##            pl_sa         pl_as                pl_ed                fu_sa     
##  Não          : 122   Não   : 286   Não          :2852   Não          :   4  
##  Não informado:   3   Recusa:   1   Não informado:   3   Não informado:   3  
##  Recusa       :   1   Sim   :4630   Recusa       :   1   Recusa       :   1  
##  Sim          :4791                 Sim          :2061   Sim          :4909  
##                                                                              
##                                                                              
##                                                                              
##     fu_as                fu_ed                chl_sa        chl_as    
##  Não   :  31   Não          :  72   Não          :  10   Não   :   5  
##  Recusa:   1   Não informado:   3   Não informado:   2   Recusa:   1  
##  Sim   :4885   Recusa       :   1   Recusa       :   1   Sim   :4911  
##                Sim          :4841   Sim          :4904                
##                                                                       
##                                                                       
##                                                                       
##            chl_ed         ser_sa           ser_as            ser_ed      
##  Não          : 666   Min.   :   1.0   Min.   :  0.000   Min.   :   0.0  
##  Não informado:   3   1st Qu.:  61.0   1st Qu.:  2.000   1st Qu.:  94.0  
##  Recusa       :   1   Median : 100.0   Median :  5.000   Median : 179.0  
##  Sim          :4247   Mean   : 135.7   Mean   :  8.559   Mean   : 267.4  
##                       3rd Qu.: 179.0   3rd Qu.: 11.000   3rd Qu.: 364.0  
##                       Max.   :1253.0   Max.   :180.000   Max.   :2460.0  
##                       NA's   :50       NA's   :11        NA's   :29      
##          consor_ed            consor_sa            consor_as   
##  Não          :4594   Não          :2396   Não          :4513  
##  Não informado:   1   Não informado:   1   Não informado:   1  
##  Recusa       :   1   Recusa       :   1   Recusa       :   1  
##  Sim          : 321   Sim          :2519   Sim          : 402  
##                                                                
##                                                                
##                                                                
##    pib_total         pib_per_cap        ano_pib          idhm       
##  Min.   :   11715   Min.   :  3082   Min.   :2014   Min.   :0.4180  
##  1st Qu.:   58829   1st Qu.:  7491   1st Qu.:2014   1st Qu.:0.5940  
##  Median :  119973   Median : 12951   Median :2014   Median :0.6570  
##  Mean   :  238100   Mean   : 17625   Mean   :2014   Mean   :0.6521  
##  3rd Qu.:  251339   3rd Qu.: 21434   3rd Qu.:2014   3rd Qu.:0.7100  
##  Max.   :11915834   Max.   :815698   Max.   :2014   Max.   :0.8540  
##                                                                     
##     ano_idhm   
##  Min.   :2010  
##  1st Qu.:2010  
##  Median :2010  
##  Mean   :2010  
##  3rd Qu.:2010  
##  Max.   :2010  
## 

Filtrar casos com “recusa”

  • 1 mun. (cod_mun: 2102150) recusou-se a responder todas as questões

  • 1 mun. (cod_mun: 2102150) recusou-se a responder questões sobre consórcios

# capacities_2[which(capacities_2$sc_as == "Recusa"), ]
# capacities_2[which(capacities_2$sc_ed == "Recusa"), ]
# capacities_2[which(capacities_2$consor_ed == "Recusa"), ]

# # A tibble: 1 x 31
#   cod_mun nm_mun populacao faixa_pop cod_est nm_est sg_est regiao sc_sa sc_as sc_ed pl_sa pl_as pl_ed
#   <chr>   <chr>      <dbl> <fct>     <fct>   <fct>  <fct>  <fct>  <fct> <fct> <fct> <fct> <fct> <fct>
# 1 2102150 Brejo~      4291 1 - Até ~ 21      Maran~ MA     2 - N~ Recu~ Recu~ Recu~ Recu~ Recu~ Recu~

# Filtrar 1 municipio com recusa para todas as variáveis
capacities_2 <- filter(capacities_2, cod_mun != 2102150) 
capacities_2 <- filter(capacities_2, cod_mun != 4110508) 

# 4.915 casos 

Transf. sec. exclusivas em dummies

Operação em dois passos

  • O primeiro aplicado somente às secretarias
  • O segundo a todas as variáveis com respostas “Sim”
# verificar labels
unique(capacities_2$sc_sa)
## [1] Secretaria municipal exclusiva                       
## [2] Setor subordinado diretamente à chefia do Executivo  
## [3] Secretaria municipal em conjunto com outras políticas
## [4] Setor subordinado a outra secretaria                 
## [5] Recusa                                               
## [6] Não informado                                        
## [7] Órgão da administração indireta                      
## 7 Levels: Não informado Órgão da administração indireta ... Setor subordinado diretamente à chefia do Executivo
unique(capacities_2$sc_ed)
## [1] Secretaria municipal exclusiva                       
## [2] Secretaria municipal em conjunto com outras políticas
## [3] Setor subordinado diretamente à chefia do Executivo  
## [4] Órgão da administração indireta                      
## [5] Setor subordinado à outra secretaria                 
## [6] Recusa                                               
## [7] Não informado                                        
## 7 Levels: Não informado Órgão da administração indireta ... Setor subordinado diretamente à chefia do Executivo
unique(capacities_2$sc_as)
## [1] Secretaria municipal em conjunto com outras políticas
## [2] Secretaria municipal exclusiva                       
## [3] Setor subordinado diretamente à chefia do Executivo  
## [4] Setor subordinado a outra secretaria                 
## [5] Recusa                                               
## [6] Fundação pública                                     
## [7] Não possui estrutura                                 
## 7 Levels: Fundação pública Não possui estrutura ... Setor subordinado diretamente à chefia do Executivo

1º passo

  • Transformar Secretaria municipal exclusiva = Sim

  • Outras modalidades = Não

# Transformar Secretaria exclusiva = Sim.
capacities_2 <- capacities_2 %>%
  mutate_at(vars(sc_sa:sc_ed), 
            funs(ifelse(.=="Secretaria municipal exclusiva", "Sim","Não"))) 

Verificar aplicação

quantidades e porcentagens por setor

capacities_2 %>% 
  count(sc_sa, name = "quantidade") %>% 
  mutate(perc = quantidade/sum(quantidade)*100)
capacities_2 %>% 
  count(sc_as, name = "quantidade") %>% 
  mutate(perc = quantidade/sum(quantidade)*100)
capacities_2 %>% 
  count(sc_ed, name = "quantidade") %>%
  mutate(perc = quantidade/sum(quantidade)*100)

2º passo

  • Transformar todas as respostas “Sim” = 1;

  • Todas demais opções (“Não”, “Não informado”, etc) = 0

  • Depois, realizar a contagem de “Sim” e classificar

Secretarias

  • realizar contagem de “Sim” e categorizar
# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>% 
  mutate_at(vars(sc_sa:sc_ed), funs(ifelse(.== "Sim", 1, 0))) 

# Contar quantidade de "sim" e organizar colunas
  capacities_2 <- capacities_2 %>% 
    mutate(Num_sc = rowSums(select(.,sc_sa:sc_ed))) %>% 
    relocate(Num_sc, .after = sc_ed)

# Verificar 
capacities_2 %>% 
  count(Num_sc, name = "quantidade") %>% 
  mutate(perc = quantidade/sum(quantidade)*100)
# Categorizar quantidade de secretarias
capacities_2 <- capacities_2 %>% 
  mutate(Sc_class = case_when(
    Num_sc == 3 ~ "Possui 3",
    Num_sc == 2 ~ "Possui 2",
    Num_sc == 1 ~ "Possui 1",
    Num_sc == 0 ~ "Não possui")) %>% 
    relocate(Sc_class, .after = Num_sc)

levels_cat <- c("Não possui" ,"Possui 1", "Possui 2","Possui 3")

capacities_2$Sc_class <- ordered(capacities_2$Sc_class, 
               levels = c(levels_cat))

Planos

  • realizar contagem de “Sim” e categorizar
# Verificar lables
unique(capacities_1$pl_as)
## [1] "Sim"    "Não"    "Recusa"
unique(capacities_1$pl_sa)
## [1] "Sim"           "Não"           "Recusa"        "Não informado"
unique(capacities_1$pl_ed)
## [1] "Sim"           "Não"           "Não informado" "Recusa"
# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>%
  mutate_at(vars(pl_sa:pl_ed), funs(ifelse(.== "Sim", 1, 0))) 

# Contar quantidade de "sim" e organizar colunas
capacities_2 <- capacities_2 %>% 
  mutate(Num_pl = rowSums(select(.,pl_sa:pl_ed)))%>% 
  relocate(Num_pl, .after = pl_ed)

# Categorizar quantidade de planos planos
capacities_2 <- capacities_2 %>%
  mutate(Pl_class = case_when(
    Num_pl == 3 ~ "Possui 3",
    Num_pl == 2 ~ "Possui 2",
    Num_pl == 1 ~ "Possui 1",
    Num_pl == 0 ~ "Não possui")) %>% 
    relocate(Pl_class, .after = Num_pl)

capacities_2$Pl_class <- ordered(capacities_2$Pl_class, 
               levels = c(levels_cat))

Fundos

  • realizar contagem de “Sim” e categorizar
# Verificar lables
unique(capacities_1$fu_as)
## [1] "Sim"    "Não"    "Recusa"
unique(capacities_1$fu_sa)
## [1] "Sim"           "Recusa"        "Não informado" "Não"
unique(capacities_1$fu_ed)
## [1] "Sim"           "Não"           "Não informado" "Recusa"
# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>% 
  mutate_at(vars(fu_sa:fu_ed), funs(ifelse(.== "Sim", 1, 0))) 

  # Contar quantidade de "sim" e organizar colunas
  capacities_2 <- capacities_2 %>% 
    mutate(Num_fu = rowSums(select(.,fu_sa:fu_ed)))%>% 
    relocate(Num_fu, .after = fu_ed) 
  
# Categorizar quantidade de fundos
capacities_2 <- capacities_2 %>% 
  mutate(Fu_class = case_when(
    Num_fu == 3 ~ "Possui 3",
    Num_fu == 2 ~ "Possui 2",
    Num_fu == 1 ~ "Possui 1",
    Num_fu == 0 ~ "Não possui")) %>% 
    relocate(Fu_class, .after = Num_fu)

capacities_2$Fu_class <- ordered(capacities_2$Fu_class, 
               levels = c(levels_cat))

Conselhos

  • realizar contagem de “Sim” e categorizar
# Verificar lables
unique(capacities_1$chl_as)
## [1] "Sim"    "Não"    "Recusa"
unique(capacities_1$chl_sa)
## [1] "Sim"           "Não"           "Recusa"        "Não informado"
unique(capacities_1$chl_ed)
## [1] "Não"           "Sim"           "Não informado" "Recusa"
# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>% 
  mutate_at(vars(chl_sa:chl_ed), funs(ifelse(.== "Sim", 1, 0))) 

# Contar quantidade de "sim" e organizar colunas
capacities_2 <- capacities_2 %>% 
  mutate(Num_chl = rowSums(select(.,chl_sa:chl_ed)))%>% 
  relocate(Num_chl, .after = chl_ed)

# Categorizar quantidade de planos planos
capacities_2 <- capacities_2 %>% 
  mutate(Chl_class = case_when(
    Num_chl == 3 ~ "Possui 3",
    Num_chl == 2 ~ "Possui 2",
    Num_chl == 1 ~ "Possui 1",
    Num_chl == 0 ~ "Não possui")) %>% 
    relocate(Chl_class, .after = Num_chl)

capacities_2$Chl_class <- ordered(capacities_2$Chl_class, 
               levels = c(levels_cat))

Consórcios

  • realizar contagem de “Sim” e categorizar
# Assistência Social
levels(capacities_2$consor_as)
## [1] "Não"           "Não informado" "Recusa"        "Sim"
levels(capacities_2$consor_ed)
## [1] "Não"           "Não informado" "Recusa"        "Sim"
levels(capacities_2$consor_sa)
## [1] "Não"           "Não informado" "Recusa"        "Sim"
capacities_2 <- capacities_2 %>% 
  mutate_at(vars(consor_ed:consor_as), 
            funs(ifelse(.== "Sim", 1, 0)))

# Contar quantidade de "sim" e organizar colunas
capacities_2 <- capacities_2 %>% 
  mutate(Num_consor = rowSums(select(.,consor_ed:consor_as)))%>% 
  relocate(Num_consor, .after = consor_as)

# Categorizar quantidade de planos planos
capacities_2 <- capacities_2 %>% 
  mutate(Consor_class = case_when(
    Num_consor == 3 ~ "Possui 3",
    Num_consor == 2 ~ "Possui 2",
    Num_consor == 1 ~ "Possui 1",
    Num_consor == 0 ~ "Não possui")) %>% 
    relocate(Consor_class, .after = Num_consor)

capacities_2$Consor_class <- ordered(capacities_2$Consor_class, 
               levels = c(levels_cat))

Servidores

  • calcular proporção de servidores por 10.000 habitantes
capacities_2 <- capacities_2 %>%
  mutate(ser_sa_pop = ser_sa*10000/populacao,
              ser_ed_pop = ser_ed*10000/populacao,
              ser_as_pop = ser_as*10000/populacao,
              total_ser_por_10mil_hab = ser_sa_pop + ser_ed_pop + ser_as_pop,
              total_ser_por_10mil_hab = round(total_ser_por_10mil_hab)) %>% 
  relocate(ser_sa:ser_ed, .after = Consor_class ) %>% 
  relocate(ser_sa_pop:total_ser_por_10mil_hab, .after = ser_ed)

IDHM

#Verificar quantiles 
quantile(capacities_2$idhm, c(.2,.4,.6,.8,1))
##   20%   40%   60%   80%  100% 
## 0.584 0.629 0.681 0.719 0.854
min(capacities_2$idhm)
## [1] 0.418
max(capacities_2$idhm) 
## [1] 0.854
#   20%   40%   60%   80%  100% 
# 0.584 0.629 0.681 0.719 0.854 

Quintis do IDHM 20% 40% 60% 80% 100% 0.584 0.629 0.681 0.719 0.854

Categorizar IDHM

capacities_2 <- capacities_2 %>% 
  mutate(idhm_quintil = case_when(
    idhm <= 0.584 ~ "primeiro",
    idhm >= 0.585 & idhm <= 0.629 ~ "segundo",
    idhm >= 0.630 & idhm <= 0.681 ~ "terceiro",
    idhm >= 0.682 & idhm <= 0.719 ~ "quarto",
    idhm >= 0.720 ~ "quinto"))
    

levels_idhm = c("primeiro", "segundo", "terceiro", "quarto", "quinto")

capacities_2$idhm_quintil <- ordered(capacities_2$idhm_quintil, 
               levels = c(levels_idhm))

Verificar aplicação

Do nosso artigo

“Para operacionalizar essa variável, devido à necessidade de ajuste ao modelo logístico empregado (Yee, 2010), ao invés de trabalharmos com as gradações oficiais, trabalhamos com os quintis da distribuição observada , ordenados de forma crescente” p. 10

“Pela classificação do Atlas Brasil, dentre os 4.916 municípios analisados, apenas 30 se enquadram na classificação “muito baixo” e 5, na “muito alto”. Isso gera alta concentração nas categorias intermediárias (“baixo” = 1.316; “médio”= 2.054 e “alto” = 1.511). Ao adotar a classificação por quintis, aproximadamente 25% dos valores ficam classificadas em cada uma das categoriais, o que representa uma distribuição mais homogênea entre as categorias e permite a melhor aplicação do modelo logístico de regressão." p. 10, nota 4.

  • Na verdade são 20% dos valores
capacities_2 %>% 
  count(idhm_quintil, name = "qtdd_de_mun") %>% 
  mutate(perc = qtdd_de_mun/sum(qtdd_de_mun)*100)

Nova base 2

Criada para preservar os dados brutos em caso de reutilização

capacities_3 <- capacities_2

04. Ver dados manipulados

capacities_3 %>%
  datatable(extensions = 'Buttons',
            rownames = F,
            options = list(dom = 'Blfrtip',
                           buttons = c('csv', 'excel'),
                          autoFill = TRUE,
                           fixedHeader = TRUE,
                           autowidth = TRUE,
                           paging = F,
                           scrollX = TRUE,
                           scrollY = "400px"))

Verificar e remover NA’s

  • NA - Not Available (dados não disponíveis)
# Verificar existência de NAs
DataExplorer::plot_missing(capacities_3)

# NA - presentes apenas na quantidade de servidores
# 1,46% dos casos está com NA. Excluindo esses, o número de municípios decai para 4.844 (86% do total)

capacities_3 <- capacities_3 %>% 
  drop_na(total_ser_por_10mil_hab)

DataExplorer::plot_missing(capacities_3)

Not run
# Uso particular para configurações
# setwd("C:/r_files/my_academic_projects/capacidades/capacitties")
#save.image("capacities_raw_data_3.RData")
#load("capacities_raw_data_3.RData")

05. Regressões

capacities_4 <- capacities_3
  • Rodadas com a função vglm, do pacote ‘VGAM’, e os argumentos family = cumulative(parallel = T, reverse = T)

No artigo foram reportadas apenas a coluna Estimate e o p-value

Brasil

  • 4.844 casos
olr_brasil <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = capacities_4, family = cumulative(parallel = T, reverse = T))

summary(olr_brasil)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = capacities_4)
## 
## Pearson residuals:
##                        Min        1Q    Median       3Q      Max
## logitlink(P[Y>=2])  -39.89  0.002594  0.006031  0.01557  0.06668
## logitlink(P[Y>=3])  -42.78  0.008293  0.113751  0.41665 38.99648
## logitlink(P[Y>=4]) -412.20 -0.405759  0.032265  0.41417  4.56583
## logitlink(P[Y>=5])  -38.24 -0.431457 -0.101732 -0.03033  7.60692
## 
## Coefficients: 
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept):1           -1.885e+01  1.323e+00 -14.244  < 2e-16 ***
## (Intercept):2           -2.698e+01  8.476e-01 -31.830  < 2e-16 ***
## (Intercept):3           -2.906e+01  8.636e-01 -33.654  < 2e-16 ***
## (Intercept):4           -3.114e+01  8.803e-01 -35.368  < 2e-16 ***
## log(pib_per_cap)         2.999e+00  6.496e-02  46.170  < 2e-16 ***
## Num_sc                  -1.922e-01  3.597e-02  -5.343 9.14e-08 ***
## Num_pl                   2.891e-01  5.170e-02   5.593 2.23e-08 ***
## Num_fu                  -1.583e-02  1.876e-01  -0.084    0.933    
## Num_chl                  4.699e-01  8.442e-02   5.567 2.59e-08 ***
## total_ser_por_10mil_hab -3.228e-03  2.291e-04 -14.086  < 2e-16 ***
## Num_consor               2.129e-01  3.882e-02   5.484 4.16e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4]), logitlink(P[Y>=5])
## 
## Residual deviance: 9526.135 on 19365 degrees of freedom
## 
## Log-likelihood: -4763.068 on 19365 degrees of freedom
## 
## Number of Fisher scoring iterations: 7 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## 'log(pib_per_cap)'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##              20.0675294               0.8251697               1.3352692 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               0.9842928               1.5998896               0.9967775 
##              Num_consor 
##               1.2372248

Norte

  • 368 casos
norte <- capacities_4 %>% 
  filter(regiao == "1 - Norte")

olr_norte <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = norte, family = cumulative(parallel = T, reverse = T))

summary(olr_norte)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = norte)
## 
## Pearson residuals:
##                         Min       1Q   Median       3Q    Max
## logitlink(P[Y>=2]) -11.6937  0.02193  0.03387  0.05783 0.1616
## logitlink(P[Y>=3])  -8.4486 -0.63428  0.25762  0.66895 2.8873
## logitlink(P[Y>=4])  -5.5986 -0.47224 -0.20576 -0.10789 4.4049
## logitlink(P[Y>=5])  -0.9945 -0.07732 -0.04386 -0.02527 7.3799
## 
## Coefficients: 
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept):1           -1.899e+01  3.028e+00  -6.272 3.56e-10 ***
## (Intercept):2           -2.525e+01  2.920e+00  -8.646  < 2e-16 ***
## (Intercept):3           -2.778e+01  2.989e+00  -9.296  < 2e-16 ***
## (Intercept):4           -3.172e+01  3.208e+00  -9.887  < 2e-16 ***
## log(pib_per_cap)         2.812e+00  2.864e-01   9.819  < 2e-16 ***
## Num_sc                  -2.261e-01  1.562e-01  -1.447   0.1478    
## Num_pl                   2.759e-01  1.984e-01   1.391   0.1644    
## Num_fu                  -3.657e-01  4.535e-01  -0.807   0.4200    
## Num_chl                  4.202e-01  2.370e-01   1.773   0.0763 .  
## total_ser_por_10mil_hab -1.301e-03  7.617e-04  -1.707   0.0878 .  
## Num_consor              -1.338e-01  1.663e-01  -0.805   0.4210    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4]), logitlink(P[Y>=5])
## 
## Residual deviance: 650.6922 on 1461 degrees of freedom
## 
## Log-likelihood: -325.3461 on 1461 degrees of freedom
## 
## Number of Fisher scoring iterations: 6 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## '(Intercept):4'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##              16.6422866               0.7975992               1.3176625 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               0.6936807               1.5222058               0.9987004 
##              Num_consor 
##               0.8747401

Nordeste

  • 1.574 casos
nordeste <- capacities_4 %>% 
  filter(regiao == "2 - Nordeste")

olr_nordeste <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = nordeste, family = cumulative(parallel = T, reverse = T))

summary(olr_nordeste)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = nordeste)
## 
## Pearson residuals:
##                         Min       1Q   Median       3Q    Max
## logitlink(P[Y>=2]) -10.4937 -0.71844 -0.52440  1.03456  3.571
## logitlink(P[Y>=3])  -1.3915 -0.16458 -0.10526 -0.07931 10.356
## logitlink(P[Y>=4])  -0.2412 -0.02037 -0.01622 -0.01294  4.921
## 
## Coefficients: 
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept):1           -1.531e+01  1.657e+00  -9.236  < 2e-16 ***
## (Intercept):2           -1.897e+01  1.706e+00 -11.124  < 2e-16 ***
## (Intercept):3           -2.266e+01  1.954e+00 -11.601  < 2e-16 ***
## log(pib_per_cap)         1.761e+00  1.414e-01  12.454  < 2e-16 ***
## Num_sc                  -1.397e-01  7.817e-02  -1.787   0.0739 .  
## Num_pl                   4.692e-01  1.002e-01   4.681 2.85e-06 ***
## Num_fu                  -8.372e-01  3.279e-01  -2.553   0.0107 *  
## Num_chl                  4.237e-01  1.766e-01   2.399   0.0164 *  
## total_ser_por_10mil_hab -1.041e-03  4.301e-04  -2.421   0.0155 *  
## Num_consor               1.566e-01  6.982e-02   2.243   0.0249 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4])
## 
## Residual deviance: 2155.195 on 4712 degrees of freedom
## 
## Log-likelihood: -1077.598 on 4712 degrees of freedom
## 
## Number of Fisher scoring iterations: 7 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## '(Intercept):3'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##               5.8185821               0.8696209               1.5987059 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               0.4329370               1.5276287               0.9989593 
##              Num_consor 
##               1.1695124

Centro-Oeste

  • 418 casos
centro_oeste <- capacities_4 %>% 
  filter(regiao == "5 - Centro-Oeste")

olr_centro_oeste <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = nordeste, family = cumulative(parallel = T, reverse = T))

summary(olr_centro_oeste)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = nordeste)
## 
## Pearson residuals:
##                         Min       1Q   Median       3Q    Max
## logitlink(P[Y>=2]) -10.4937 -0.71844 -0.52440  1.03456  3.571
## logitlink(P[Y>=3])  -1.3915 -0.16458 -0.10526 -0.07931 10.356
## logitlink(P[Y>=4])  -0.2412 -0.02037 -0.01622 -0.01294  4.921
## 
## Coefficients: 
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept):1           -1.531e+01  1.657e+00  -9.236  < 2e-16 ***
## (Intercept):2           -1.897e+01  1.706e+00 -11.124  < 2e-16 ***
## (Intercept):3           -2.266e+01  1.954e+00 -11.601  < 2e-16 ***
## log(pib_per_cap)         1.761e+00  1.414e-01  12.454  < 2e-16 ***
## Num_sc                  -1.397e-01  7.817e-02  -1.787   0.0739 .  
## Num_pl                   4.692e-01  1.002e-01   4.681 2.85e-06 ***
## Num_fu                  -8.372e-01  3.279e-01  -2.553   0.0107 *  
## Num_chl                  4.237e-01  1.766e-01   2.399   0.0164 *  
## total_ser_por_10mil_hab -1.041e-03  4.301e-04  -2.421   0.0155 *  
## Num_consor               1.566e-01  6.982e-02   2.243   0.0249 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4])
## 
## Residual deviance: 2155.195 on 4712 degrees of freedom
## 
## Log-likelihood: -1077.598 on 4712 degrees of freedom
## 
## Number of Fisher scoring iterations: 7 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## '(Intercept):3'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##               5.8185821               0.8696209               1.5987059 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               0.4329370               1.5276287               0.9989593 
##              Num_consor 
##               1.1695124

Sudeste

  • 1.407 casos
sudeste <- capacities_4 %>% 
  filter(regiao == "3 - Sudeste")

olr_sudeste <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = sudeste, family = cumulative(parallel = T, reverse = T))

summary(olr_sudeste)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = sudeste)
## 
## Pearson residuals:
##                         Min       1Q   Median     3Q    Max
## logitlink(P[Y>=2])   -7.287  0.05029  0.08777 0.1928 16.844
## logitlink(P[Y>=3]) -296.849 -0.26635  0.20975 0.4934  2.085
## logitlink(P[Y>=4])  -25.669 -0.59329 -0.18417 0.6732  5.626
## 
## Coefficients: 
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept):1           -2.248e+01  1.833e+00 -12.261  < 2e-16 ***
## (Intercept):2           -2.513e+01  1.850e+00 -13.586  < 2e-16 ***
## (Intercept):3           -2.740e+01  1.877e+00 -14.600  < 2e-16 ***
## log(pib_per_cap)         2.647e+00  1.368e-01  19.350  < 2e-16 ***
## Num_sc                  -1.251e-01  6.811e-02  -1.836 0.066322 .  
## Num_pl                  -1.268e-01  9.624e-02  -1.318 0.187562    
## Num_fu                   3.821e-01  4.467e-01   0.855 0.392340    
## Num_chl                  6.619e-01  1.780e-01   3.718 0.000201 ***
## total_ser_por_10mil_hab -2.441e-03  4.241e-04  -5.756 8.61e-09 ***
## Num_consor              -6.481e-01  9.305e-02  -6.965 3.28e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]), 
## logitlink(P[Y>=4])
## 
## Residual deviance: 2668.3 on 4211 degrees of freedom
## 
## Log-likelihood: -1334.15 on 4211 degrees of freedom
## 
## Number of Fisher scoring iterations: 7 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## 'log(pib_per_cap)'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap)                  Num_sc                  Num_pl 
##              14.1096099               0.8824353               0.8808905 
##                  Num_fu                 Num_chl total_ser_por_10mil_hab 
##               1.4654154               1.9384173               0.9975619 
##              Num_consor 
##               0.5230478

Sul

  • 1.077 casos
sul <- capacities_4 %>% 
  filter(regiao == "4 - Sul")

olr_sul <- vglm(idhm_quintil ~ log(pib_per_cap) + 
                  Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,  
                  data = sul, family = cumulative(parallel = T, reverse = T))

summary(olr_sul)
## 
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl + 
##     Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor, 
##     family = cumulative(parallel = T, reverse = T), data = sul)
## 
## Pearson residuals:
##                        Min
## logitlink(P[Y>=2]) -10.246
## logitlink(P[Y>=3]) -18.162
## logitlink(P[Y>=4])  -8.533
##                          1Q
## logitlink(P[Y>=2])  0.03047
## logitlink(P[Y>=3])  0.12385
## logitlink(P[Y>=4]) -0.81938
##                     Median
## logitlink(P[Y>=2]) 0.04609
## logitlink(P[Y>=3]) 0.20622
## logitlink(P[Y>=4]) 0.20442
##                         3Q
## logitlink(P[Y>=2]) 0.06672
## logitlink(P[Y>=3]) 0.41389
## logitlink(P[Y>=4]) 0.78411
##                       Max
## logitlink(P[Y>=2]) 0.5401
## logitlink(P[Y>=3]) 1.0257
## logitlink(P[Y>=4]) 3.0945
## 
## Coefficients: 
##                            Estimate
## (Intercept):1           -19.5138738
## (Intercept):2           -22.8895114
## (Intercept):3           -25.3453916
## log(pib_per_cap)          2.6543825
## Num_sc                   -0.2585624
## Num_pl                    0.0732197
## Num_fu                   -0.3294161
## Num_chl                   0.0566288
## total_ser_por_10mil_hab  -0.0014970
## Num_consor                0.1601353
##                          Std. Error
## (Intercept):1             2.6226197
## (Intercept):2             2.5933103
## (Intercept):3             2.6153290
## log(pib_per_cap)          0.1981137
## Num_sc                    0.0691492
## Num_pl                    0.1170027
## Num_fu                    0.5543246
## Num_chl                   0.2136118
## total_ser_por_10mil_hab   0.0006309
## Num_consor                0.0912997
##                         z value
## (Intercept):1            -7.441
## (Intercept):2            -8.826
## (Intercept):3            -9.691
## log(pib_per_cap)         13.398
## Num_sc                   -3.739
## Num_pl                    0.626
## Num_fu                   -0.594
## Num_chl                   0.265
## total_ser_por_10mil_hab  -2.373
## Num_consor                1.754
##                                     Pr(>|z|)
## (Intercept):1                0.0000000000001
## (Intercept):2           < 0.0000000000000002
## (Intercept):3           < 0.0000000000000002
## log(pib_per_cap)        < 0.0000000000000002
## Num_sc                              0.000185
## Num_pl                              0.531450
## Num_fu                              0.552334
## Num_chl                             0.790931
## total_ser_por_10mil_hab             0.017661
## Num_consor                          0.079439
##                            
## (Intercept):1           ***
## (Intercept):2           ***
## (Intercept):3           ***
## log(pib_per_cap)        ***
## Num_sc                  ***
## Num_pl                     
## Num_fu                     
## Num_chl                    
## total_ser_por_10mil_hab *  
## Num_consor              .  
## ---
## Signif. codes:  
##   0 '***' 0.001
##   '**' 0.01 '*'
##   0.05 '.' 0.1 '  ' 1
## 
## Names of linear predictors: 
## logitlink(P[Y>=2]), 
## logitlink(P[Y>=3]), 
## logitlink(P[Y>=4])
## 
## Residual deviance: 1829.168 on 3221 degrees of freedom
## 
## Log-likelihood: -914.5841 on 3221 degrees of freedom
## 
## Number of Fisher scoring iterations: 5 
## 
## Warning: Hauck-Donner effect detected in the following estimate(s):
## 'log(pib_per_cap)'
## 
## 
## Exponentiated coefficients:
##        log(pib_per_cap) 
##              14.2162048 
##                  Num_sc 
##               0.7721609 
##                  Num_pl 
##               1.0759669 
##                  Num_fu 
##               0.7193436 
##                 Num_chl 
##               1.0582629 
## total_ser_por_10mil_hab 
##               0.9985041 
##              Num_consor 
##               1.1736696

06. Mapas

Carregar dados e tema

shape_mun <- geobr::read_municipality(simplified = T, showProgress = F)
shape_estado <- geobr::read_state(simplified = T, showProgress = F)
Not run
# Uso particular para configurações
#setwd("C:/r_files/my_academic_projects/capacidades/capacitties")
#save.image("capacities_raw_data_4.RData")
#load("capacities_raw_data_4.RData")
# rm(list = setdiff(ls(), "map"))
#save.image("capacities_raw_data_shapes.RData")
load("capacities_raw_data_shapes.RData")
map <- shape_mun %>% 
  select(cod_mun = code_muni, geom) %>% 
  mutate(cod_mun = as.character(cod_mun)) %>% 
  left_join(capacities_4)

Config. para mapa

#save(map, "map.RData")
theme_map_manual <- function(){
        theme(legend.position = c(0.35, 0.5), 
        legend.justification = c("right", "top"),
        legend.background = element_blank(),
        plot.title=element_text( hjust=0, vjust=-5, face='bold', size = 12))
}        

levels_map <- levels(map$Sc_class)
# inverter ordem e incluir NA
levels_map <- c(levels_map[c(4:1)], NA)

# Definir cores
colors_map <- c(scales::viridis_pal(option = "D")(4), "gray40")

# Definir cor para cada level
names(colors_map) <- levels_map

# Definir rótulos 
labels_map <- levels_map
labels_map[5] <- "Não analisados\nAcima de 50.000hab."

Secretarias

map_sc <- map %>% 
  ggplot()+
  geom_sf(aes(fill = fct_infreq(Sc_class)), 
          color = NA)+
  scale_fill_manual(name = "Secretarias", 
                    values = colors_map,
                    na.value = "gray40",
                    limits = levels_map,
                    breaks = levels_map,
                    labels = labels_map)+
  geom_sf(data=shape_estado, fill=NA, color = "black")+
  ggthemes::theme_map()+
  theme_map_manual()+
  ggtitle("Secretarias exclusivas")

Planos

map_pl <- map %>% 
  ggplot()+
  geom_sf(aes(fill = fct_infreq(Pl_class)), color = NA)+
  scale_fill_manual(name = "Planos", 
                    values = colors_map,
                    na.value = "gray40",
                    limits = levels_map,
                    breaks = levels_map,
                    labels = labels_map)+
  geom_sf(data=shape_estado, fill=NA, color = "black")+
  ggthemes::theme_map()+
  theme_map_manual()+
  ggtitle("Planos")

Fundos

map_fu <- map %>% 
  ggplot()+
  geom_sf(aes(fill = fct_infreq(Fu_class)), color = NA)+
  scale_fill_manual(name = "Fundos", 
                    values = colors_map,
                    na.value = "gray40",
                    limits = levels_map,
                    breaks = levels_map,
                    labels = labels_map)+
  geom_sf(data=shape_estado, fill=NA, color = "black")+
  ggthemes::theme_map()+
  theme_map_manual()+
  ggtitle("Fundos")

Conselhos

map_chl <- map %>% 
  ggplot()+
  geom_sf(aes(fill = fct_infreq(Chl_class)), 
          color = NA)+
  scale_fill_manual(name = "Conselhos", 
                    values = colors_map,
                    na.value = "gray40",
                    limits = levels_map,
                    breaks = levels_map,
                    labels = labels_map)+
  geom_sf(data=shape_estado, fill=NA, color = "black")+
  ggthemes::theme_map()+
  theme_map_manual()+
  ggtitle("Conselhos")

Visualizar mapas

mapas <- gridExtra::grid.arrange(map_sc, map_pl, map_fu, map_chl, ncol = 2)

mapas
## TableGrob (2 x 2) "arrange": 4 grobs
##   z     cells    name           grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (1-1,2-2) arrange gtable[layout]
## 3 3 (2-2,1-1) arrange gtable[layout]
## 4 4 (2-2,2-2) arrange gtable[layout]
X11(width = 20, height = 20); mapas
## TableGrob (2 x 2) "arrange": 4 grobs
##   z     cells    name           grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (1-1,2-2) arrange gtable[layout]
## 3 3 (2-2,1-1) arrange gtable[layout]
## 4 4 (2-2,2-2) arrange gtable[layout]

07. Tabelas auxiliares

Não reportadas no artigo

Matriz de correlação

cap_cor <- capacities_4 %>% 
  select(pib_per_cap, idhm, starts_with("Num"), total_ser_por_10mil_hab, populacao)

corr <- round(cor(cap_cor), 2)

ggcorrplot(corr, hc.order = F, 
           type = "lower", 
           show.diag = T,
           pch = 12,
           pch.cex = 12,
           tl.cex = 12,
           lab = TRUE, 
           lab_size = 3, 
           method="circle", 
           colors = c("tomato2", "white", "springgreen3"), 
           title="Correlação entre variáveis numéricas", 
           ggtheme=theme_bw)

IDHM por região

sjPlot::sjt.xtab(capacities_4$idhm_quintil, 
                 capacities_4$regiao, 
                 encoding = "windows", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T,
                 title = "IDHM por região")
IDHM por região
idhm_quintil regiao Total
1 - Norte 2 - Nordeste 3 - Sudeste 4 - Sul 5 - Centro-Oeste
primeiro 1
100 %
0.3 %
0
0 %
0 %
0
0 %
0 %
0
0 %
0 %
0
0 %
0 %
1
100 %
0 %
segundo 154
12.8 %
41.8 %
975
81.2 %
61.9 %
61
5.1 %
4.3 %
5
0.4 %
0.5 %
6
0.5 %
1.4 %
1201
100 %
24.8 %
terceiro 150
12.4 %
40.8 %
564
46.8 %
35.8 %
308
25.6 %
21.9 %
109
9 %
10.1 %
74
6.1 %
17.7 %
1205
100 %
24.9 %
quarto 60
4.8 %
16.3 %
34
2.7 %
2.2 %
497
40.1 %
35.3 %
412
33.2 %
38.3 %
237
19.1 %
56.7 %
1240
100 %
25.6 %
quinto 3
0.3 %
0.8 %
1
0.1 %
0.1 %
541
45.2 %
38.5 %
551
46 %
51.2 %
101
8.4 %
24.2 %
1197
100 %
24.7 %
Total 368
7.6 %
100 %
1574
32.5 %
100 %
1407
29 %
100 %
1077
22.2 %
100 %
418
8.6 %
100 %
4844
100 %
100 %

IDHM por tamanho população

sjPlot::sjt.xtab(capacities_4$idhm_quintil, 
                 capacities_4$faixa_pop, 
                 encoding = "UTF-8", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T,
                 title = "IDHM por tamanho população")
IDHM por tamanho população
idhm_quintil faixa_pop Total
1 - Até 5000 2 - 5001 até 10000 3 - 10001 até 20000 4 - 20001 até 50000
primeiro 0
0 %
0 %
0
0 %
0 %
0
0 %
0 %
1
100 %
0.1 %
1
100 %
0 %
segundo 173
14.4 %
14.1 %
309
25.7 %
25.8 %
447
37.2 %
32.9 %
272
22.6 %
25.7 %
1201
100 %
24.8 %
terceiro 289
24 %
23.5 %
305
25.3 %
25.4 %
339
28.1 %
25 %
272
22.6 %
25.7 %
1205
100 %
24.9 %
quarto 405
32.7 %
32.9 %
336
27.1 %
28 %
315
25.4 %
23.2 %
184
14.8 %
17.4 %
1240
100 %
25.6 %
quinto 363
30.3 %
29.5 %
249
20.8 %
20.8 %
257
21.5 %
18.9 %
328
27.4 %
31 %
1197
100 %
24.7 %
Total 1230
25.4 %
100 %
1199
24.8 %
100 %
1358
28 %
100 %
1057
21.8 %
100 %
4844
100 %
100 %

Secretarias Brasil

sjPlot::sjt.xtab(capacities_4$idhm_quintil, 
                 capacities_4$Sc_class, 
                 encoding = "UTF-8", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T)
idhm_quintil Sc_class Total
Não possui Possui 1 Possui 2 Possui 3
primeiro 0
0 %
0 %
0
0 %
0 %
0
0 %
0 %
1
100 %
0 %
1
100 %
0 %
segundo 9
0.7 %
4.1 %
101
8.4 %
17.2 %
456
38 %
23.2 %
635
52.9 %
30.7 %
1201
100 %
24.8 %
terceiro 23
1.9 %
10.4 %
127
10.5 %
21.6 %
498
41.3 %
25.3 %
557
46.2 %
26.9 %
1205
100 %
24.9 %
quarto 71
5.7 %
32 %
161
13 %
27.4 %
545
44 %
27.7 %
463
37.3 %
22.4 %
1240
100 %
25.6 %
quinto 119
9.9 %
53.6 %
198
16.5 %
33.7 %
468
39.1 %
23.8 %
412
34.4 %
19.9 %
1197
100 %
24.7 %
Total 222
4.6 %
100 %
587
12.1 %
100 %
1967
40.6 %
100 %
2068
42.7 %
100 %
4844
100 %
100 %

Secretarias Norte

  sjt.xtab(norte$idhm_quintil, 
                 norte$Sc_class, 
                 encoding = "UTF-8", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T,
           title = "Norte")
Norte
idhm_quintil Sc_class Total
Não possui Possui 1 Possui 2 Possui 3
primeiro 0
0 %
0 %
0
0 %
0 %
0
0 %
0 %
1
100 %
0.5 %
1
100 %
0.3 %
segundo 1
0.6 %
100 %
12
7.8 %
30 %
42
27.3 %
30.9 %
99
64.3 %
51.8 %
154
100 %
41.8 %
terceiro 0
0 %
0 %
24
16 %
60 %
64
42.7 %
47.1 %
62
41.3 %
32.5 %
150
100 %
40.8 %
quarto 0
0 %
0 %
4
6.7 %
10 %
27
45 %
19.9 %
29
48.3 %
15.2 %
60
100 %
16.3 %
quinto 0
0 %
0 %
0
0 %
0 %
3
100 %
2.2 %
0
0 %
0 %
3
100 %
0.8 %
Total 1
0.3 %
100 %
40
10.9 %
100 %
136
37 %
100 %
191
51.9 %
100 %
368
100 %
100 %

Secretarias Nordeste

  sjt.xtab(nordeste$idhm_quintil, 
                 nordeste$Sc_class, 
                 encoding = "UTF-8", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T,
           title = "Nordeste")
Nordeste
idhm_quintil Sc_class Total
Não possui Possui 1 Possui 2 Possui 3
primeiro 0
0 %
0 %
0
0 %
0 %
0
0 %
0 %
0
0 %
0 %
0
100 %
0 %
segundo 7
0.7 %
53.8 %
82
8.4 %
55.8 %
394
40.4 %
61.6 %
492
50.5 %
63.6 %
975
100 %
61.9 %
terceiro 5
0.9 %
38.5 %
62
11 %
42.2 %
231
41 %
36.1 %
266
47.2 %
34.4 %
564
100 %
35.8 %
quarto 0
0 %
0 %
3
8.8 %
2 %
15
44.1 %
2.3 %
16
47.1 %
2.1 %
34
100 %
2.2 %
quinto 1
100 %
7.7 %
0
0 %
0 %
0
0 %
0 %
0
0 %
0 %
1
100 %
0.1 %
Total 13
0.8 %
100 %
147
9.3 %
100 %
640
40.7 %
100 %
774
49.2 %
100 %
1574
100 %
100 %

Secretarias Centro-Oeste

  sjt.xtab(centro_oeste$idhm_quintil, 
                 centro_oeste$Sc_class,
                 encoding = "UTF-8", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T,
           title = "Centro-Oeste")
Centro-Oeste
idhm_quintil Sc_class Total
Não possui Possui 1 Possui 2 Possui 3
primeiro 0
0 %
0 %
0
0 %
0 %
0
0 %
0 %
0
0 %
0 %
0
100 %
0 %
segundo 0
0 %
0 %
2
33.3 %
5.7 %
3
50 %
1.5 %
1
16.7 %
0.5 %
6
100 %
1.4 %
terceiro 1
1.4 %
50 %
7
9.5 %
20 %
30
40.5 %
15.4 %
36
48.6 %
19.4 %
74
100 %
17.7 %
quarto 1
0.4 %
50 %
17
7.2 %
48.6 %
115
48.5 %
59 %
104
43.9 %
55.9 %
237
100 %
56.7 %
quinto 0
0 %
0 %
9
8.9 %
25.7 %
47
46.5 %
24.1 %
45
44.6 %
24.2 %
101
100 %
24.2 %
Total 2
0.5 %
100 %
35
8.4 %
100 %
195
46.7 %
100 %
186
44.5 %
100 %
418
100 %
100 %

Secretarias Sudeste

  sjt.xtab(sudeste$idhm_quintil, 
                 sudeste$Sc_class, 
                 encoding = "UTF-8", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T,
           title = "Sudeste")
Sudeste
idhm_quintil Sc_class Total
Não possui Possui 1 Possui 2 Possui 3
primeiro 0
0 %
0 %
0
0 %
0 %
0
0 %
0 %
0
0 %
0 %
0
100 %
0 %
segundo 1
1.6 %
2.1 %
4
6.6 %
2.8 %
16
26.2 %
3.1 %
40
65.6 %
5.6 %
61
100 %
4.3 %
terceiro 4
1.3 %
8.5 %
23
7.5 %
16.2 %
108
35.1 %
21.2 %
173
56.2 %
24.4 %
308
100 %
21.9 %
quarto 26
5.2 %
55.3 %
63
12.7 %
44.4 %
182
36.6 %
35.7 %
226
45.5 %
31.9 %
497
100 %
35.3 %
quinto 16
3 %
34 %
52
9.6 %
36.6 %
204
37.7 %
40 %
269
49.7 %
38 %
541
100 %
38.5 %
Total 47
3.3 %
100 %
142
10.1 %
100 %
510
36.2 %
100 %
708
50.3 %
100 %
1407
100 %
100 %

Secretarias Sul

  sjt.xtab(sul$idhm_quintil, 
                 sul$Sc_class, 
                 encoding = "UTF-8", 
                 show.summary = F,
                 show.row.prc = T,
                 show.col.prc = T,
                  title = "Sul")
Sul
idhm_quintil Sc_class Total
Não possui Possui 1 Possui 2 Possui 3
primeiro 0
0 %
0 %
0
0 %
0 %
0
0 %
0 %
0
0 %
0 %
0
100 %
0 %
segundo 0
0 %
0 %
1
20 %
0.4 %
1
20 %
0.2 %
3
60 %
1.4 %
5
100 %
0.5 %
terceiro 13
11.9 %
8.2 %
11
10.1 %
4.9 %
65
59.6 %
13.4 %
20
18.3 %
9.6 %
109
100 %
10.1 %
quarto 44
10.7 %
27.7 %
74
18 %
33.2 %
206
50 %
42.4 %
88
21.4 %
42.1 %
412
100 %
38.3 %
quinto 102
18.5 %
64.2 %
137
24.9 %
61.4 %
214
38.8 %
44 %
98
17.8 %
46.9 %
551
100 %
51.2 %
Total 159
14.8 %
100 %
223
20.7 %
100 %
486
45.1 %
100 %
209
19.4 %
100 %
1077
100 %
100 %

Demais tabelas…